// https://vuex.vuejs.org/zh-cn/intro.html
// make sure to call Vue.use(Vuex) if using a module system

/*
* 项目数据状态中心，状态中心与缓存绑定，其余地方不得再使用缓存
* state里面的键值，表示状态值，此项目不使用action，仅使用mutation，提交mutation时，mutation type 为 对应的state键转为大写即可
* 例如： state.innerText 对一个 store.commit('INNERTEXT', payLoad),
* 小程序缓存的键值同样使用以上的大写字段
* */

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

let initData = {
  // 游戏配置
  gameConfig: {
    persistence: false, // 是否持久化，持久化借用wx.setStorageSync实现
    default: {}
  }
}

let state = {}
let mutations = {}

for (let key in initData) {
  let upcaseKey = key.toUpperCase()
  if (initData[key].persistence) {
    state[key] = wx.getStorageSync(upcaseKey) || initData[key].default
    mutations[upcaseKey] = (storeState, obj) => {
      wx.setStorageSync(upcaseKey, obj)
      storeState[key] = obj
    }
  } else {
    state[key] = initData[key].default
    mutations[upcaseKey] = (storeState, obj) => {
      storeState[key] = obj
    }
  }
}

const store = new Vuex.Store({
  state,
  mutations
})

export default store
